It is becoming more and more common to run software applications in a shared hosting environment. For example, an application service provider (ASP) is a business that provides computer-based services to customers over a network. Those in the art often refer to software offered using an ASP model as on-demand software or software as a service (SaaS). The most limited sense of this business is that of providing access to a particular application program (such as medical billing) using a standard protocol such as HTTP. There is a growing market for hosted services where a hosting provider invites customers to submit and run their custom applications in an environment shared with other applications. One example of a hosted application environment is a web-based customer relations manager (CRM) application, such as SalesForce.com. Using shared hosting frees the customer from the burden of purchasing and administering servers, and allows the hosting provider to realize economies of scale that come from managing many servers for hosted applications.
In computer networking, load balancing is a technique to spread work between two or more computers, network links, CPUs, hard drives, or other resources, in order to get good resource utilization, throughput, or response time. Using multiple components with load balancing, instead of a single component, may increase reliability through redundancy. It is commonly used to mediate internal communications in computer clusters, especially high-availability clusters. In the area of hosted applications, one way to balance the load among servers it to assign each customer to a server or group of servers.
In a shared hosting environment, the hosting provider is responsible for ensuring that servers do not become too overloaded and that one application or customer does not affect the availability of resources for other applications or customers. Each customer wants to be treated as if his/her application is the only one running on the resources provided by the host. The host, on the other hand, wants to place as many customers on the same hardware as possible to reduce the cost of purchasing hardware and to reduce the number of servers and other resources that system administrators have to manage. One way of balancing these two priorities is by determining the maximum load that a customer can place on the hosted environment. The distribution of customers on a particular server can then be determined by dividing the total resources of the server by the resources consumed by each customer. However, this may lead to under loading of the server as few customers may ever use such high levels of load on the server and even those that do will often not do so all at the same time.